# Vuelidate

Vuelidate é uma biblioteca para validação dos dados de entrada v-model

Com ele, conseguimos fazer validação de formulários de uma forma intuitiva.

# Adicionando no Projeto

yarn add vuelidate

Agora utilizando o Vue.use() iremos registrar nossa biblioteca:

./src/main.js

import Vue from 'vue';
import Vuelidate from 'vuelidate';
import App from './App.vue';
import vuetify from './plugins/vuetify';
import router from './plugins/vuerouter';
import store from './store';

Vue.config.productionTip = false;

Vue.use(Vuelidate);

new Vue({
  vuetify,
  router,
  store,
  render: (h) => h(App),
}).$mount('#app');
  • O Vuelidate não tem necessidade de registrar dentro da instância Vue, igual o Vuetify, VueRouter e Vuex.

Antes de aplicar as validações no formulário de login, vamos fazer o formulário de registrar!

``./src/routes.js`

import Register from './pages/Register.vue';
// ...
{
  path: '/register',
  component: Register,
  beforeEnter: multiguard([deslogado]),
},
// ...

./src/pages/Register.vue

<template>
  <v-app>
    <v-content>
      <v-container
        class="fill-height"
        fluid
      >
        <v-row
          align="center"
          justify="center"
        >
          <v-col
            cols="12"
            sm="8"
            md="4"
          >
            <v-card class="elevation-12">
              <v-toolbar
                color="deep-purple"
                dark
                flat
              >
                <v-toolbar-title>Cadastre sua Conta!</v-toolbar-title>
              </v-toolbar>
              <v-card-text>
                <v-form>
                  <v-text-field
                    label="Conta"
                    type="text"
                    color="deep-purple"
                    v-model="conta"
                    class="conta"
                  />
                  <v-text-field
                    label="Senha"
                    type="password"
                    color="deep-purple"
                    v-model="senha"
                    class="senha"
                  />
                  <v-text-field
                    label="Repetir Senha"
                    type="password"
                    color="deep-purple"
                    v-model="repetirSenha"
                    class="repetirSenha"
                  />
                </v-form>
              </v-card-text>
              <v-card-actions>
                <v-card-text >Já possui uma conta? Clique
                  <span>
                    <router-link
                      to="/login"
                      style="text-decoration: none; color: purple">
                      aqui
                    </router-link>
                  </span>
                </v-card-text>
                <v-spacer />
                <v-btn
                  color="deep-purple"
                  dark
                  @click.prevent="enviarFormulario()"
                >Entrar
                </v-btn>
              </v-card-actions>
            </v-card>
          </v-col>
        </v-row>
      </v-container>
    </v-content>
  </v-app>
</template>

<script>
export default {
  data() {
    return {
      conta: '',
      senha: '',
      repetirSenha: '',
    };
  },
  methods: {
    enviarFormulario() {},
  },
};
</script>

Bem parecido com o nosso Login, agora vamos aplicar o Vuelidate

# Validators

O Vuelidate trabalha com validators, ele irá escutar toda alteração no v-model e retornando true ou false* dependendo do que estiver como condição nos validators

Vamos fazer o nosso validator do Register.vue:

<script>
import {
  required,
  sameAs,
  minLength,
  email,
} from 'vuelidate/lib/validators';

export default {
  data() {
    return {
      conta: '',
      senha: '',
      repetirSenha: '',
    };
  },
  validations: {
    conta: {
      email,
    },
    senha: {
      required,
      minLength: minLength(8),
    },
    repetirSenha: {
      sameAsPassword: sameAs('senha'),
    },
  },
  methods: {
    enviarFormulario() {
      if (!this.$v.$invalid) {
        // POST para a rota em uma possível API
        localStorage.setItem('AUTENTICADO', true);
        this.$store.dispatch('usuarioLogado', {
          conta: this.conta,
          senha: this.senha,
        });
        this.$router.push('/dashboard');
      }
    },
  },
};
</script>
  • Importamos os validators.

  • Colocamos o tipo de validação.

  • Verificamos se o formulário é válido no enviarFormulario().

  • Também podemos utilizar as validações em nosso template:

<template>
  <p v-if="!$v.senha.required">Digite a senha!</p>
</template>

Recomendamos FORTEMENTE que olhe a documentação do Vuelidate.

Na próxima seção iremos apresentar a forma de fazer internacionalização no Vue!

Próxima Seção